/**
 * @file RecetaDAO.java
 * @brief Obtiene y actualiza la información de la BD referente a las Recetas.
 *
 * Copyright (C)  - April [2011]
 *
 * @author Ana Ferreira Blanco
 * @version 01.00
 *
 */


package GestorCitas;

import java.io.IOException;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import Servicios.Conexion;


/**
 * @class RecetaDAO
 * @brief Obtiene y actualiza la información de la BD referente a las Recetas.
 */
public class RecetaDAO {

    /* Métodos de clase */

    /*
    @brief Agrega la instancia LineaReceta en la BD.
    */
    public static void add( Receta r ) throws SQLException, IOException, ClassNotFoundException {
        Conexion.conectar();
	String instrucciones = r.getInstruccionesReceta().toString();
        String juicioDiagnostico = r.getJuicioDiagnosticoReceta().toString();
        

        Conexion.actualizar("INSERT Receta(instrucciones, juicioDiagnostico,mandadaEn)"
                            + " VALUES (\'"+ instrucciones+"\'"
                            + ",\'" + juicioDiagnostico+ "\'"
                            + "," +r.getIdCita()+ ");");
	Conexion.desconectar();
    }

    /*
    @brief Borra la instancia LineaReceta de la BD.
    */
    public static void delete ( Receta r ) throws SQLException, IOException, ClassNotFoundException {
        Conexion.conectar();
	Conexion.actualizar("DELETE FROM Receta WHERE idReceta="+r.getIdReceta()+";");
        Conexion.desconectar();
    }

    /*
    @brief Actualiza la información asociada al objeto Receta.
    */
    public static void update ( Receta r ) throws SQLException, IOException, ClassNotFoundException {
        String instrucciones = r.getInstruccionesReceta().toString();
        String juicioDiagnostico = r.getJuicioDiagnosticoReceta().toString();
        Conexion.conectar();
	Conexion.actualizar("UPDATE Receta SET instrucciones=\'" + instrucciones + "\'"
                                                 + " , juicioDiagnostico=\'" + juicioDiagnostico + "\'"
                                                 + " , mandadaEn=" + r.getIdCita()
                                                 + " WHERE idReceta="+r.getIdReceta()+";");
	Conexion.desconectar();
    }

    /*
    @brief Obtiene la instancia Receta con el id pasado como argumento.
    */
    public static Receta get ( int id ) throws SQLException, IOException, ClassNotFoundException {
        
        Receta receta_buscada = null;
        Conexion.conectar();

        ResultSet tabla = Conexion.consultar("SELECT * FROM Receta WHERE Receta.idReceta = " + id + ";");
        if (tabla.next()) { // Encontrado



        receta_buscada = new Receta(tabla.getInt("idReceta"), tabla.getString("instrucciones"),
                                       tabla.getString("juicioDiagnostico"), tabla.getInt("mandadaEn"));


        } else {
                receta_buscada = null;
        }
        Conexion.desconectar();
        return receta_buscada;
    }

    /*
    @brief Obtiene objetos Receta que coincidan con los parámetros no nulos pasados como argumento.
    */
    public static Receta[] get ( String instrucciones, String juicioDiagnostico,Integer idCita)
                                 throws SQLException, IOException, ClassNotFoundException {
        Receta[] recetas = null;
        String consulta = "";
        ResultSet receta;
        ArrayList<Receta> l_recetas = new ArrayList<Receta>();
        
        // Generamos la consulta a la BD
        if(instrucciones != null){
            if(!consulta.equals("")) consulta += " AND ";
            consulta += "instrucciones=\'" + instrucciones + "\'";
        }
        
        if(juicioDiagnostico != null){
            if(!consulta.equals("")) consulta += " AND ";
            consulta += "juicioDiagnostico=\'" + juicioDiagnostico + "\'";
        }
        
        if(idCita != null){
            if(!consulta.equals("")) consulta += " AND ";
            consulta += "mandadaEn=\'" + idCita + "\'";
        }
       
        Conexion.conectar();
	if(!consulta.equals("")) receta = Conexion.consultar("SELECT * FROM Receta WHERE " + consulta + ";");
        else receta = Conexion.consultar("SELECT * FROM Receta");

	// Lista de recetas obtenidas
        while(receta.next()){
            
            l_recetas.add(new Receta(receta.getInt("idReceta"),receta.getString("instrucciones"),
                    receta.getString("juicioDiagnostico"),receta.getInt("mandadaEn")));
        }
        Conexion.desconectar();
        
        // Vector de recetas que se devuelve
        if(l_recetas.size()>0){
            recetas = new Receta[l_recetas.size()];
            l_recetas.toArray(recetas);
        }
        return recetas;


    }
    



}
